package com.dc.refactoring._6_处理概括关系._12_ReplaceDelegationWithInheritance.oldObject;

public class Employee {

    /**
     * 当前的 Employee 和 Person 是一个委托关系，
     * Employee 类的作用就是为了为 Person 的函数进行委托操作。
     * 如 setName()、getName() 方法。
     *
     *
     * 条件：
     *    1、如果没有使用受托类的所有函数，那么就不应该使用 以继承代替委托，因为子类应该总是遵循超类的接口；
     *    2、可以使用 提炼超类，将两个类接口相同部分提炼到超类中，然后让两个类都继承这个新的超类（或者使用提炼接口）
     *    3、让客户端自己调用受托函数；
     *    4、***当心*** 受托对象被不止一个其他对象共享，而且受托对象是可变的，这种情况就不能将委托关系替换为继承关系，因为就不能共享数据了。
     *       数据共享是必须由委托关系承担的一种责任，你无法转给继承关系。
     *       如果受托对象是不可变的，数据共享就不成问题。
     */
    private Person person = new Person();

    public String getName(){
        return person.getName();
    }

    public void setName(String name){
        person.setName(name);
    }

    @Override
    public String toString(){
        return "Emp: " + person.getLastName();
    }
}
